#include <iostream>
#include <stdio.h>
using namespace std;

class A
{
public:
	A()
	{
		printf("A()\n");
	}
	 ~A()
	{
	    printf("~A()\n");
	 }
};

class B:public A
{
public:
	B()
	{
		printf("B()\n");
	}
	~B()
	{
	    printf("~B()\n");
	}
};
class C:public B
{
public:
	C()
	{
		printf("C()\n");
	}
	~C()
	{
	    printf("~C()\n");
	}
};

//通过父类指针，把所有子类对象的析构函数都执行一遍。通过父类指针释放所有子类资源。
void howtodelete(A *base)
{
    delete base;//加了virtual，此句话会发生多态
}

int main()
{
	C *myC=new C;//调用三次构造函数
	howtodelete(myC);//若不加虚析构函数，只会释放父类内存，将发生内存泄露。
	//delete myC;  //直接通过子类释放所有资源  注意子类释放和父类释放区别。
	return 0;
}